package com.zkh.myutils.utils;

import java.io.IOException;
import javax.servlet.http.HttpServletResponse;

/**
 * Web工具类
 */
public class WebUtils {
	//json类型
	private static String jsonType = "application/json;charset=utf-8";
	//text/html类型
	private static String htmlType = "text/html;charset=utf-8";
	//text/plain方式发送文本
	private static String textType = "text/plain;charset=utf-8";

	/**
	 * 将对象转换成json字符串，发送JSON数据
	 */
	public static void sendJson(HttpServletResponse resp, Object obj, boolean ignoreNullValueKey){
		//设置头信息
		resp.setContentType(jsonType);
		//输出数据
		print(resp, JSONUtils.getJSON(obj).toString(ignoreNullValueKey));
	}
	
	/**
	 * 将对象转换成json字符串，发送HTML数据
	 */
	public static void sendHtmlWithJSON(HttpServletResponse resp, Object obj, boolean ignoreNullValueKey){
		//设置头信息
		resp.setContentType(htmlType);
		//输出数据
		print(resp, JSONUtils.getJSON(obj).toString(ignoreNullValueKey));
	}
	
	/**
	 * 将对象转换成json字符串，发送TEXT数据
	 */
	public static void sendTextWithJSON(HttpServletResponse resp, Object obj, boolean ignoreNullValueKey){
		//设置头信息
		resp.setContentType(textType);
		//输出数据
		print(resp, JSONUtils.getJSON(obj).toString(ignoreNullValueKey));
	}
	
	/**
	 * 发送HTML数据到浏览器
	 */
	public static void sendHtml(HttpServletResponse resp, String html){
		//设置头信息
		resp.setContentType(htmlType);
		//输出数据
		print(resp, html);
	}
	
	/**
	 * 发送TEXT数据到浏览器
	 */
	public static void sendText(HttpServletResponse resp, String text){
		//设置头信息
		resp.setContentType(textType);
		//输出数据
		print(resp, text);
	}
	
	/**
	 * 发送手机端HTML代码
	 */
	public static void sendPhoneHtml(HttpServletResponse resp, String html){
		//设置头信息
		resp.setContentType(htmlType);
		//输出数据
		StringBuilder sb = new StringBuilder();
		appendln(sb, "<!doctype html>");
		appendln(sb, "<html lang=\"en\">");
		appendln(sb, "<head>");
		appendln(sb, "\t<meta charset=\"UTF-8\">");
		appendln(sb, "\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\">");
		appendln(sb, "\t<title>信息反馈</title>");
		appendln(sb, "</head>");
		appendln(sb, "<body>");
		appendln(sb, html);
		appendln(sb, "</body>");
		appendln(sb, "</html>");
		//输出数据
		print(resp, sb.toString());
	}
	
	/**
	 * 返回上一个页面，即JS中的history.back();
	 */
	public static void backPhone(HttpServletResponse resp, String message){
		//设置头信息
		resp.setContentType(htmlType);
		//输出数据
		StringBuilder sb = new StringBuilder();
		appendln(sb, "<!doctype html>");
		appendln(sb, "<html lang=\"en\">");
		appendln(sb, "<head>");
		appendln(sb, "\r<meta charset=\"UTF-8\">");
		appendln(sb, "\r<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\">");
		appendln(sb, "\r<title>信息反馈</title>");
		appendln(sb, "</head>");
		appendln(sb, "<body>");
		//输出信息
		appendln(sb, "<script>");
		//如果有信息，先弹出框
		if(StringUtils.isNotEmpty(message)){
			appendln(sb, "\ralert('"+message+"');");
		}
		//返回
		appendln(sb, "\rhistory.back();");
		//结尾标识符
		appendln(sb, "</script>");
		appendln(sb, "</body>");
		appendln(sb, "</html>");
		//输出
		print(resp, sb.toString());
	}
	/**
	 * 返回到上一个页面
	 */
	public static void back(HttpServletResponse resp, String message){
		//设置头信息
		resp.setContentType(htmlType);
		//输出数据
		StringBuilder sb = new StringBuilder();
		appendln(sb, "<script>");
		//如果有信息，先弹出框
		if(StringUtils.isNotEmpty(message)){
			appendln(sb, "\ralert('"+message+"');");
		}
		//返回
		appendln(sb, "\rhistory.back();");
		//结尾标识符
		appendln(sb, "</script>");
		//输出
		print(resp, sb.toString());
	}
	
	/**
	 * 弹出消息后，跳转到指定页面
	 * @param message 弹出的消息
	 * @param url 要跳转的页面
	 */
	public static void go(HttpServletResponse resp, String message, String url){
		//设置头信息
		resp.setContentType(htmlType);
		//输出数据
		StringBuilder sb = new StringBuilder();
		//输出信息
		appendln(sb, "<script>");
		//如果有信息，先弹出框
		if(StringUtils.isNotEmpty(message)){
			appendln(sb, "\ralert('"+message+"');");
		}
		//关闭当前页面
		appendln(sb, "\rlocation.href='" + url + "';");
		//结尾标识符
		appendln(sb, "</script>");
		//输出
		print(resp, sb.toString());
	}
	
	/**
	 * 后退并刷新(back只后退不刷新)
	 */
	public static void goReferrer(HttpServletResponse resp, String message) {
		//设置头信息
		resp.setContentType(htmlType);
		//输出数据
		StringBuilder sb = new StringBuilder();
		//输出信息
		appendln(sb, "<script>");
		//如果有信息，先弹出框
		if(StringUtils.isNotEmpty(message)){
			appendln(sb, "\ralert('"+message+"');");
		}
		//返回
		appendln(sb, "\rlocation.href=document.referrer;");
		//结尾标识符
		appendln(sb, "</script>");
		//输出
		print(resp, sb.toString());
	}
	
	/**
	 * 输出字符串
	 * @param resp 响应对象
	 * @param string 待输出的字符串
	 */
	private static void print(HttpServletResponse resp, String string){
		//输出数据
		try {
			resp.getWriter().print(string);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 给参数追加内容并换行
	 * @param sb 待追加内容的对象
	 * @param text 待追加的内容
	 */
	private static StringBuilder appendln(StringBuilder sb, String text) {
		return sb.append(text+"\r\n");
	}

}
